#ifndef _HRX_LIST_H
#define _HRX_LIST_H

typedef struct ListSt List;

#ifdef __cplusplus
extern "C"{
#endif

/*
* @group 创建链表
* @ret 返回链表指针，在申请内存失败时返回NULL
*/
List *ListNew(void);

/*
* @pgrop 获取第一个数据，可以与ListNextData一起使用，遍历链表
* @param l [in] 输入链表指针
* @ret  返回用户数据
*/
void *ListFirstData(List *l);

/*
* @pgrop 获取下一个数据，需要与ListFirstData一起使用，遍历链表
* @param l [in] 输入链表指针
* @ret  返回用户数据
*/
void *ListNextData(List *l);

/*
* @pgrop 将数据写入头节点
* @param l [in] 输入链表指针
* @param data [in] 用户数据指针, data必须不为NULL
* @ret  返回失败(0)，返回成功(1)
*/
int ListPush(List *l, void *data);

/*
* @pgrop 将数据写入尾节点
* @param l [in] 输入链表指针
* @param data [in] 用户数据指针, data必须不为NULL
* @ret  返回失败(0)，返回成功(1)
*/
int ListAdd(List *l, void *data);

/*
* @pgrop 获取头节点数据，并且删除头节点
* @param l [in] 输入链表指针
* @ret  返回用户数据
*/
void *ListPop(List *l);

#ifdef __cplusplus
}
#endif

#endif